Repository navigation
PR-FLOW-01: PowerShell command labels over ogar-loco (ogar-flow-m365) - #368
Merged
Merged
Conversation
…loco call ABI (PR-FLOW-01) Adds a sibling crate that resolves friendly administrator labels (Get-MgUser, Get-IamLicenseEvidence, Get-IamMembership, Where-Object, Select-Object, Export-Report, and their aliases) to typed operations, lowers an admitted read-only pipeline subset into one ogar-loco Quads body, and runs it through the unchanged ogar-loco Interpreter under a flow Dialect. The actor is the canonical user of an ogar-auth VerifiedLogin; its scope (tenant, capabilities, field mask, policy version) comes from an injected ReportAuthority before anything runs. Mutating and code-executing labels are known and refused; they have no call byte. A synthetic John Doe 101 fixture and falsifiers F1-F10 cover resolution, aliases, vocabulary reuse, read-only enforcement, actor isolation, field projection, determinism, parity with a direct typed reference, LOCO conformance and unsupported syntax. ogar-loco is not modified. No concept is minted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XAqKMM44PgMCtYoqx6XYnh
…re unpinned Three disables came back green: the host-side field filter, tenant scoping of host queries, and the leftover-stack check. Each guard is now exercised directly: the population's loaded fields are inspected mid-run, every host query is checked for the scoped tenant, and a hand-built body that leaves a value on the stack is refused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XAqKMM44PgMCtYoqx6XYnh
… reach The export clip filtered fields that no current operation can put in a row (get_user projects at the source, attach checks the scope), so its disable run stayed green. Removed rather than kept as an unpinned guard. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XAqKMM44PgMCtYoqx6XYnh
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
AdaWorldAPI
marked this pull request as ready for review
November 4, 2026 23:06
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
A new sibling crate,
ogar-flow-m365. It maps PowerShell-style admin labels (Get-MgUser,Get-IamLicenseEvidence,Get-IamMembership,Where-Object,Select-Object,Export-Report, plus aliases) to typed operations. An admitted read-only pipeline subset is lowered into oneogar-locoQuads body, which the unchangedogar_loco::Interpreterruns under a flowDialect.This compiles to calls
0x90 0x91 0x94 0x95. Run against the synthetic fixture, it produces a deterministic JSON report containing the requested user, the three permitted fields, the license facts, the source id, the observed version, the applied scope, the policy version and a per-stage trace.Litmus test
Get-MgUserwas added without touchingogar-loco:git diff origin/main -- crates/ogar-locois empty. There are no new opcodes and no changes to the ABI, the interpreter, the conformance rules orDOMAIN_FLOOR.Design
adjacency.rs): label →OperationId→Operation. Each operation records its effect, capability, input/output shape, backend, call byte and concept binding. Aliases point at the same operation row. Mutating labels (Set-MgUser,Remove-MgUser,New-MgGroupMember,Set-MgUserLicense) and executing labels (Invoke-Expression/iex) are known but have no call byte, so they are refused. Unknown labels are refused.vocab.rs): six domain bytes0x90..=0x95. It passesogar-lococonformance.Where-Objectuses the shared-coreEQ/NEQ/LIST_CONTAINSbytes as its comparison codebook.Select-Objectpacks alance_graph_contract::class_view::FieldMask.run_flowaccepts only anogar_auth::federation::VerifiedLogin. AReportAuthoritymaps the canonical user to aReportScope(tenant, capabilities, field mask, policy version) before anything runs. Host queries carry the scope's tenant, never one named in the pipeline. Filtering or selecting an unpermitted field is refused.Implemented / mocked / deferred
fixturefeature, not security): directory observations, the report authority, the assertion verifier. The verifier still goes through the realestablish.OgarRbacand registering the vocabulary under a body classid. Both need concept ids thatogar-vocabdoes not mint today: directory user, license assignment, group membership, report. That is an operator decision; this PR mints nothing.Tests
cargo test -p ogar-flow-m365: 29 passed. These are falsifiers F1–F10 on synthetic data.ogar-locosuite has 84 passed, both before and after this change.cargo clippy -p ogar-flow-m365 --all-targets --features fixture -D warningsis clean, andcargo fmt --checkis clean.@inside bareword emails was wrongly refused.projectcollided with the mintedprojectconcept0x0101, so it was renamed toselect_fields.Dependency impact
ogar-locois unchanged. The new crate pulls inogar-authforVerifiedLogin, and with itogar-auth's crypto stack: 97 unique crates in the normal-dependency tree.Next seam
PR-FLOW-02 wires
ogar-azobservations and the OGAR RBAC authority once the concepts are minted. PR-FLOW-03 adds thereport-rspalette, built oncompilefor preview andrun_flowwith the session'sVerifiedLogin. The crate README has the details.Generated by Claude Code